import axios from "axios"
import type { InternalAxiosRequestConfig, AxiosResponse } from "axios"
import { useUserStore } from "@/stores/modules/user"
import seeting from "@/config/seeting"
import { Base64 } from "js-base64"
import { ElMessage } from "element-plus"

const request = axios.create({
	timeout: 10000
})

// 请求拦截器
request.interceptors.request.use((config: InternalAxiosRequestConfig) => {
	const user = useUserStore()
	// 所有接口都要添加客户端认证参数
	config.headers['Authorization'] = 'Basic ' + Base64.encode(seeting.clientId + ':' + seeting.clientSecret)
	// 添加租户ID
	config.headers['Tenant-ld'] = seeting.tenantId
	// 添加token
	let accessToken = user.token;
	// 如果带有携带token的标记 在请求头中增加token
	if (accessToken) {
		config.headers['Xckj-Auth'] = 'bearer ' + accessToken;
	}
	return config
}, (error: any) => {
	return Promise.reject(error)
}
)
// 响应拦截器
request.interceptors.response.use((res: AxiosResponse) => {
	const user = useUserStore()
	const status = res.data.code || res.status;
	if (status == 200) {
		// 请求成功
		return res.data
	} else if (status == 401) {
		ElMessage.error("登录状态过期,请重新登录");
		//如果是401则跳转到登录页面
		user.logOut()
	} else {
		// 其他情况统一处理
		ElMessage.error(res.data.msg || "服务器出错啦,休息一会吧~");
		return Promise.reject(res.data.msg || "服务器出错啦,休息一会吧~");
	}
	return res.data
}, (error: any) => {
	// 处理网络错误，不是服务器响应的数据
	// console.log("进入错误",error);
	if (error && error.response) {
		ElMessage.error(error.response.data.error_description || "请求错误,请稍后重试");
	}
	return Promise.reject(error)
}
)

export default request